package com.hyper_yang.javase.multiThread;
/*
进程与线程:
    进程: 电脑中正在执行的程序，是操作系统分配资源和调度的最基本单位。
    线程: 线程是进程内的一个执行单元，是执行代码的，是CPU分配资源和调度的最基本单位。
    一个进程包含多个线程: 每个线程负责的任务是不同的。 【多线程程序】
并发与并行
    并行: 同一时刻，多条指令在多个CPU上执行
    并发: 同一时刻，多条指令在单个CPU上执行
CPU调度:
    分时调度: 公平调度
    抢占式调度: 根据优先级来分配资源
 */
public class ThreadCreate {
/*
线程创建中，两种方式的区别:
    1、继承 Thread更简单，直观 || 实现 Runnable并不是创建线程，而是线程任务
    2、实现 Runnable方式更灵活，因为 Java中的类是单继承、接口是多实现，Runnable更易拓展
    3、实现 Runnable方式，更方便共享资源  【见 diff 包】
 */
    public static void main(String[] args) {
        System.out.println("Main方法启动");

        // todo: 继承 Thread创建
        // 在 main()线程中，创建线程对象  【3】
        MyThread myThread = new MyThread();
        // 线程对象.start() 启动线程   【4】
        myThread.start();

        // todo: 实现 Runnable创建
        // 创建 Runnable接口的实现类对象    [3]
        MyRunnable myRunnable = new MyRunnable();
        // 创建 Thread线程对象，将线程任务传进去     [4]
        Thread thread = new Thread(myRunnable);
        // 线程对象.start() 启动线程 [5]
        thread.run();

        for (int i = 0; i < 10; i++) {
            System.out.println("Main: " + i);
        }
    }
}

// 线程创建方式之继承 Thread
// todo: 创建类继承 Thread类   【1】
class MyThread extends Thread{
//    void method(){
//        for (int i = 0; i < 10; i++) {
//            System.out.println("MyThread-Method: " + i);
//        }
//    }

    // 线程任务法: 当前这个线程要执行的代码。
    // todo: 重写 run方法，写这个线程的任务代码   【2】
    @Override
    public void run() {
        for (int i = 0; i < 10; i++)
            System.out.println("MyThread-run: " + i);
    }
}

// 线程创建方式之实现 Runnable接口
// todo: 创建类 实现 Runnable接口    [1]
class MyRunnable implements Runnable{
    // todo: 重写 run方法，写这个线程的任务代码    [2]
    @Override
    public void run() {
        for (int i = 0; i < 10; i++)
            System.out.println("MyRunnable-run: " + i);
    }
}